aboutsummaryrefslogtreecommitdiff
path: root/dep/fmt/src
diff options
context:
space:
mode:
Diffstat (limited to 'dep/fmt/src')
-rw-r--r--dep/fmt/src/fmt.cc111
-rw-r--r--dep/fmt/src/format.cc16
-rw-r--r--dep/fmt/src/os.cc170
3 files changed, 170 insertions, 127 deletions
diff --git a/dep/fmt/src/fmt.cc b/dep/fmt/src/fmt.cc
index 5330463a932..0713da75c39 100644
--- a/dep/fmt/src/fmt.cc
+++ b/dep/fmt/src/fmt.cc
@@ -1,38 +1,61 @@
module;
+#define FMT_MODULE
+
+#ifdef _MSVC_LANG
+# define FMT_CPLUSPLUS _MSVC_LANG
+#else
+# define FMT_CPLUSPLUS __cplusplus
+#endif
+
// Put all implementation-provided headers into the global module fragment
// to prevent attachment to this module.
-#include <algorithm>
+#ifndef FMT_IMPORT_STD
+# include <algorithm>
+# include <bitset>
+# include <chrono>
+# include <cmath>
+# include <complex>
+# include <cstddef>
+# include <cstdint>
+# include <cstdio>
+# include <cstdlib>
+# include <cstring>
+# include <ctime>
+# include <exception>
+# if FMT_CPLUSPLUS > 202002L
+# include <expected>
+# endif
+# include <filesystem>
+# include <fstream>
+# include <functional>
+# include <iterator>
+# include <limits>
+# include <locale>
+# include <memory>
+# include <optional>
+# include <ostream>
+# include <source_location>
+# include <stdexcept>
+# include <string>
+# include <string_view>
+# include <system_error>
+# include <thread>
+# include <type_traits>
+# include <typeinfo>
+# include <utility>
+# include <variant>
+# include <vector>
+#else
+# include <limits.h>
+# include <stdint.h>
+# include <stdio.h>
+# include <stdlib.h>
+# include <string.h>
+# include <time.h>
+#endif
#include <cerrno>
-#include <chrono>
#include <climits>
-#include <cmath>
-#include <cstddef>
-#include <cstdint>
-#include <cstdio>
-#include <cstdlib>
-#include <cstring>
-#include <ctime>
-#include <exception>
-#include <filesystem>
-#include <fstream>
-#include <functional>
-#include <iterator>
-#include <limits>
-#include <locale>
-#include <memory>
-#include <optional>
-#include <ostream>
-#include <stdexcept>
-#include <string>
-#include <string_view>
-#include <system_error>
-#include <thread>
-#include <type_traits>
-#include <typeinfo>
-#include <utility>
-#include <variant>
-#include <vector>
#include <version>
#if __has_include(<cxxabi.h>)
@@ -70,6 +93,10 @@ module;
export module fmt;
+#ifdef FMT_IMPORT_STD
+import std;
+#endif
+
#define FMT_EXPORT export
#define FMT_BEGIN_EXPORT export {
#define FMT_END_EXPORT }
@@ -83,6 +110,10 @@ export module fmt;
extern "C++" {
#endif
+#ifndef FMT_OS
+# define FMT_OS 1
+#endif
+
// All library-provided declarations and definitions must be in the module
// purview to be exported.
#include "fmt/args.h"
@@ -90,8 +121,12 @@ extern "C++" {
#include "fmt/color.h"
#include "fmt/compile.h"
#include "fmt/format.h"
-#include "fmt/os.h"
+#if FMT_OS
+# include "fmt/os.h"
+#endif
+#include "fmt/ostream.h"
#include "fmt/printf.h"
+#include "fmt/ranges.h"
#include "fmt/std.h"
#include "fmt/xchar.h"
@@ -104,5 +139,17 @@ extern "C++" {
module :private;
#endif
-#include "format.cc"
-#include "os.cc"
+#ifdef FMT_ATTACH_TO_GLOBAL_MODULE
+extern "C++" {
+#endif
+
+#if FMT_HAS_INCLUDE("format.cc")
+# include "format.cc"
+#endif
+#if FMT_OS && FMT_HAS_INCLUDE("os.cc")
+# include "os.cc"
+#endif
+
+#ifdef FMT_ATTACH_TO_GLOBAL_MODULE
+}
+#endif
diff --git a/dep/fmt/src/format.cc b/dep/fmt/src/format.cc
index 391d3a248c2..05d0105bc4e 100644
--- a/dep/fmt/src/format.cc
+++ b/dep/fmt/src/format.cc
@@ -8,6 +8,12 @@
#include "fmt/format-inl.h"
FMT_BEGIN_NAMESPACE
+
+#if FMT_USE_LOCALE
+template FMT_API locale_ref::locale_ref(const std::locale& loc);
+template FMT_API auto locale_ref::get<std::locale>() const -> std::locale;
+#endif
+
namespace detail {
template FMT_API auto dragonbox::to_decimal(float x) noexcept
@@ -15,28 +21,22 @@ template FMT_API auto dragonbox::to_decimal(float x) noexcept
template FMT_API auto dragonbox::to_decimal(double x) noexcept
-> dragonbox::decimal_fp<double>;
-#ifndef FMT_STATIC_THOUSANDS_SEPARATOR
-template FMT_API locale_ref::locale_ref(const std::locale& loc);
-template FMT_API auto locale_ref::get<std::locale>() const -> std::locale;
-#endif
-
// Explicit instantiations for char.
template FMT_API auto thousands_sep_impl(locale_ref)
-> thousands_sep_result<char>;
template FMT_API auto decimal_point_impl(locale_ref) -> char;
+// DEPRECATED!
template FMT_API void buffer<char>::append(const char*, const char*);
-template FMT_API void vformat_to(buffer<char>&, string_view,
- typename vformat_args<>::type, locale_ref);
-
// Explicit instantiations for wchar_t.
template FMT_API auto thousands_sep_impl(locale_ref)
-> thousands_sep_result<wchar_t>;
template FMT_API auto decimal_point_impl(locale_ref) -> wchar_t;
+// DEPRECATED!
template FMT_API void buffer<wchar_t>::append(const wchar_t*, const wchar_t*);
} // namespace detail
diff --git a/dep/fmt/src/os.cc b/dep/fmt/src/os.cc
index a639e78c602..4d7c299b83c 100644
--- a/dep/fmt/src/os.cc
+++ b/dep/fmt/src/os.cc
@@ -12,47 +12,51 @@
#include "fmt/os.h"
-#include <climits>
+#ifndef FMT_MODULE
+# include <climits>
-#if FMT_USE_FCNTL
-# include <sys/stat.h>
-# include <sys/types.h>
-
-# ifdef _WRS_KERNEL // VxWorks7 kernel
-# include <ioLib.h> // getpagesize
-# endif
+# if FMT_USE_FCNTL
+# include <sys/stat.h>
+# include <sys/types.h>
-# ifndef _WIN32
-# include <unistd.h>
-# else
-# ifndef WIN32_LEAN_AND_MEAN
-# define WIN32_LEAN_AND_MEAN
+# ifdef _WRS_KERNEL // VxWorks7 kernel
+# include <ioLib.h> // getpagesize
# endif
-# include <io.h>
-# ifndef S_IRUSR
-# define S_IRUSR _S_IREAD
-# endif
-# ifndef S_IWUSR
-# define S_IWUSR _S_IWRITE
-# endif
-# ifndef S_IRGRP
-# define S_IRGRP 0
-# endif
-# ifndef S_IWGRP
-# define S_IWGRP 0
-# endif
-# ifndef S_IROTH
-# define S_IROTH 0
-# endif
-# ifndef S_IWOTH
-# define S_IWOTH 0
-# endif
-# endif // _WIN32
-#endif // FMT_USE_FCNTL
+# ifndef _WIN32
+# include <unistd.h>
+# else
+# ifndef WIN32_LEAN_AND_MEAN
+# define WIN32_LEAN_AND_MEAN
+# endif
+# include <io.h>
+# endif // _WIN32
+# endif // FMT_USE_FCNTL
+
+# ifdef _WIN32
+# include <windows.h>
+# endif
+#endif
#ifdef _WIN32
-# include <windows.h>
+# ifndef S_IRUSR
+# define S_IRUSR _S_IREAD
+# endif
+# ifndef S_IWUSR
+# define S_IWUSR _S_IWRITE
+# endif
+# ifndef S_IRGRP
+# define S_IRGRP 0
+# endif
+# ifndef S_IWGRP
+# define S_IWGRP 0
+# endif
+# ifndef S_IROTH
+# define S_IROTH 0
+# endif
+# ifndef S_IWOTH
+# define S_IWOTH 0
+# endif
#endif
namespace {
@@ -62,14 +66,14 @@ using rwresult = int;
// On Windows the count argument to read and write is unsigned, so convert
// it from size_t preventing integer overflow.
-inline unsigned convert_rwcount(std::size_t count) {
+inline unsigned convert_rwcount(size_t count) {
return count <= UINT_MAX ? static_cast<unsigned>(count) : UINT_MAX;
}
#elif FMT_USE_FCNTL
// Return type of read and write functions.
using rwresult = ssize_t;
-inline std::size_t convert_rwcount(std::size_t count) { return count; }
+inline auto convert_rwcount(size_t count) -> size_t { return count; }
#endif
} // namespace
@@ -156,7 +160,7 @@ void detail::format_windows_error(detail::buffer<char>& out, int error_code,
}
void report_windows_error(int error_code, const char* message) noexcept {
- report_error(detail::format_windows_error, error_code, message);
+ do_report_error(detail::format_windows_error, error_code, message);
}
#endif // _WIN32
@@ -181,13 +185,15 @@ void buffered_file::close() {
FMT_THROW(system_error(errno, FMT_STRING("cannot close file")));
}
-int buffered_file::descriptor() const {
-#if !defined(fileno)
+auto buffered_file::descriptor() const -> int {
+#ifdef FMT_HAS_SYSTEM
+ // fileno is a macro on OpenBSD.
+# ifdef fileno
+# undef fileno
+# endif
int fd = FMT_POSIX_CALL(fileno(file_));
-#elif defined(FMT_HAS_SYSTEM)
- // fileno is a macro on OpenBSD so we cannot use FMT_POSIX_CALL.
-# define FMT_DISABLE_MACRO
- int fd = FMT_SYSTEM(fileno FMT_DISABLE_MACRO(file_));
+#elif defined(_WIN32)
+ int fd = _fileno(file_);
#else
int fd = fileno(file_);
#endif
@@ -200,6 +206,7 @@ int buffered_file::descriptor() const {
# ifdef _WIN32
using mode_t = int;
# endif
+
constexpr mode_t default_open_mode =
S_IRUSR | S_IWUSR | S_IRGRP | S_IWGRP | S_IROTH | S_IWOTH;
@@ -233,7 +240,7 @@ void file::close() {
FMT_THROW(system_error(errno, FMT_STRING("cannot close file")));
}
-long long file::size() const {
+auto file::size() const -> long long {
# ifdef _WIN32
// Use GetFileSize instead of GetFileSizeEx for the case when _WIN32_WINNT
// is less than 0x0500 as is the case with some default MinGW builds.
@@ -244,7 +251,7 @@ long long file::size() const {
if (size_lower == INVALID_FILE_SIZE) {
DWORD error = GetLastError();
if (error != NO_ERROR)
- FMT_THROW(windows_error(GetLastError(), "cannot get file size"));
+ FMT_THROW(windows_error(error, "cannot get file size"));
}
unsigned long long long_size = size_upper;
return (long_size << sizeof(DWORD) * CHAR_BIT) | size_lower;
@@ -259,7 +266,7 @@ long long file::size() const {
# endif
}
-std::size_t file::read(void* buffer, std::size_t count) {
+auto file::read(void* buffer, size_t count) -> size_t {
rwresult result = 0;
FMT_RETRY(result, FMT_POSIX_CALL(read(fd_, buffer, convert_rwcount(count))));
if (result < 0)
@@ -267,7 +274,7 @@ std::size_t file::read(void* buffer, std::size_t count) {
return detail::to_unsigned(result);
}
-std::size_t file::write(const void* buffer, std::size_t count) {
+auto file::write(const void* buffer, size_t count) -> size_t {
rwresult result = 0;
FMT_RETRY(result, FMT_POSIX_CALL(write(fd_, buffer, convert_rwcount(count))));
if (result < 0)
@@ -275,7 +282,7 @@ std::size_t file::write(const void* buffer, std::size_t count) {
return detail::to_unsigned(result);
}
-file file::dup(int fd) {
+auto file::dup(int fd) -> file {
// Don't retry as dup doesn't return EINTR.
// http://pubs.opengroup.org/onlinepubs/009695399/functions/dup.html
int new_fd = FMT_POSIX_CALL(dup(fd));
@@ -301,30 +308,7 @@ void file::dup2(int fd, std::error_code& ec) noexcept {
if (result == -1) ec = std::error_code(errno, std::generic_category());
}
-void file::pipe(file& read_end, file& write_end) {
- // Close the descriptors first to make sure that assignments don't throw
- // and there are no leaks.
- read_end.close();
- write_end.close();
- int fds[2] = {};
-# ifdef _WIN32
- // Make the default pipe capacity same as on Linux 2.6.11+.
- enum { DEFAULT_CAPACITY = 65536 };
- int result = FMT_POSIX_CALL(pipe(fds, DEFAULT_CAPACITY, _O_BINARY));
-# else
- // Don't retry as the pipe function doesn't return EINTR.
- // http://pubs.opengroup.org/onlinepubs/009696799/functions/pipe.html
- int result = FMT_POSIX_CALL(pipe(fds));
-# endif
- if (result != 0)
- FMT_THROW(system_error(errno, FMT_STRING("cannot create pipe")));
- // The following assignments don't throw because read_fd and write_fd
- // are closed.
- read_end = file(fds[0]);
- write_end = file(fds[1]);
-}
-
-buffered_file file::fdopen(const char* mode) {
+auto file::fdopen(const char* mode) -> buffered_file {
// Don't retry as fdopen doesn't return EINTR.
# if defined(__MINGW32__) && defined(_POSIX_)
FILE* f = ::fdopen(fd_, mode);
@@ -352,8 +336,26 @@ file file::open_windows_file(wcstring_view path, int oflag) {
}
# endif
+pipe::pipe() {
+ int fds[2] = {};
+# ifdef _WIN32
+ // Make the default pipe capacity same as on Linux 2.6.11+.
+ enum { DEFAULT_CAPACITY = 65536 };
+ int result = FMT_POSIX_CALL(pipe(fds, DEFAULT_CAPACITY, _O_BINARY));
+# else
+ // Don't retry as the pipe function doesn't return EINTR.
+ // http://pubs.opengroup.org/onlinepubs/009696799/functions/pipe.html
+ int result = FMT_POSIX_CALL(pipe(fds));
+# endif
+ if (result != 0)
+ FMT_THROW(system_error(errno, FMT_STRING("cannot create pipe")));
+ // The following assignments don't throw.
+ read_end = file(fds[0]);
+ write_end = file(fds[1]);
+}
+
# if !defined(__MSDOS__)
-long getpagesize() {
+auto getpagesize() -> long {
# ifdef _WIN32
SYSTEM_INFO si;
GetSystemInfo(&si);
@@ -372,31 +374,25 @@ long getpagesize() {
}
# endif
-namespace detail {
-
-void file_buffer::grow(size_t) {
- if (this->size() == this->capacity()) flush();
+void ostream::grow(buffer<char>& buf, size_t) {
+ if (buf.size() == buf.capacity()) static_cast<ostream&>(buf).flush();
}
-file_buffer::file_buffer(cstring_view path,
- const detail::ostream_params& params)
- : file_(path, params.oflag) {
+ostream::ostream(cstring_view path, const detail::ostream_params& params)
+ : buffer<char>(grow), file_(path, params.oflag) {
set(new char[params.buffer_size], params.buffer_size);
}
-file_buffer::file_buffer(file_buffer&& other)
- : detail::buffer<char>(other.data(), other.size(), other.capacity()),
+ostream::ostream(ostream&& other) noexcept
+ : buffer<char>(grow, other.data(), other.size(), other.capacity()),
file_(std::move(other.file_)) {
other.clear();
other.set(nullptr, 0);
}
-file_buffer::~file_buffer() {
+ostream::~ostream() {
flush();
delete[] data();
}
-} // namespace detail
-
-ostream::~ostream() = default;
#endif // FMT_USE_FCNTL
FMT_END_NAMESPACE