aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--dep/PackageList.txt2
-rw-r--r--dep/fmt/fmt/format.h85
-rw-r--r--dep/fmt/fmt/printf.h2
3 files changed, 55 insertions, 34 deletions
diff --git a/dep/PackageList.txt b/dep/PackageList.txt
index f3042c03700..50597948e8c 100644
--- a/dep/PackageList.txt
+++ b/dep/PackageList.txt
@@ -22,7 +22,7 @@ efws (Entropia File System Watcher - crossplatform file system watcher)
fmt (a small, safe and fast formatting library)
https://github.com/fmtlib/fmt
- Version: 4.0.0 5f39721c0a41be404a23c3893cdea89e598c9531
+ Version: 4.0.0 f9c97de46b9914c86366ddcb3474a36e654cbd42
G3D (a commercial-grade C++ 3D engine available as Open Source (BSD License)
http://g3d.sourceforge.net/
diff --git a/dep/fmt/fmt/format.h b/dep/fmt/fmt/format.h
index dd8d2836005..bd99746a58c 100644
--- a/dep/fmt/fmt/format.h
+++ b/dep/fmt/fmt/format.h
@@ -157,7 +157,7 @@ typedef __int64 intmax_t;
# define FMT_HAS_CXX17_ATTRIBUTE_MAYBE_UNUSED
// VC++ 1910 support /std: option and that will set _MSVC_LANG macro
// Clang with Microsoft CodeGen doesn't define _MSVC_LANG macro
-#elif defined(_MSVC_LANG) && _MSVC_LANG > 201402
+#elif defined(_MSVC_LANG) && _MSVC_LANG > 201402 && _MSC_VER >= 1910
# define FMT_HAS_CXX17_ATTRIBUTE_MAYBE_UNUSED
#endif
@@ -200,6 +200,12 @@ typedef __int64 intmax_t;
# endif
#endif
+#if __cplusplus >= 201103L || FMT_MSC_VER >= 1700
+# define FMT_USE_ALLOCATOR_TRAITS 1
+#else
+# define FMT_USE_ALLOCATOR_TRAITS 0
+#endif
+
// Check if exceptions are disabled.
#if defined(__GNUC__) && !defined(__EXCEPTIONS)
# define FMT_EXCEPTIONS 0
@@ -869,7 +875,12 @@ void MemoryBuffer<T, SIZE, Allocator>::grow(std::size_t size) {
std::size_t new_capacity = this->capacity_ + this->capacity_ / 2;
if (size > new_capacity)
new_capacity = size;
+#if FMT_USE_ALLOCATOR_TRAITS
+ T *new_ptr =
+ std::allocator_traits<Allocator>::allocate(*this, new_capacity, FMT_NULL);
+#else
T *new_ptr = this->allocate(new_capacity, FMT_NULL);
+#endif
// The following code doesn't throw, so the raw pointer above doesn't leak.
std::uninitialized_copy(this->ptr_, this->ptr_ + this->size_,
make_ptr(new_ptr, new_capacity));
@@ -3623,10 +3634,10 @@ void arg(WStringRef, const internal::NamedArg<Char>&) FMT_DELETED_OR_UNDEFINED;
#define FMT_GET_ARG_NAME(type, index) arg##index
#if FMT_USE_VARIADIC_TEMPLATES
-# define FMT_VARIADIC_(Char, ReturnType, func, call, ...) \
+# define FMT_VARIADIC_(Const, Char, ReturnType, func, call, ...) \
template <typename... Args> \
ReturnType func(FMT_FOR_EACH(FMT_ADD_ARG_NAME, __VA_ARGS__), \
- const Args & ... args) { \
+ const Args & ... args) Const { \
typedef fmt::internal::ArgArray<sizeof...(Args)> ArgArray; \
typename ArgArray::Type array{ \
ArgArray::template make<fmt::BasicFormatter<Char> >(args)...}; \
@@ -3636,35 +3647,35 @@ void arg(WStringRef, const internal::NamedArg<Char>&) FMT_DELETED_OR_UNDEFINED;
#else
// Defines a wrapper for a function taking __VA_ARGS__ arguments
// and n additional arguments of arbitrary types.
-# define FMT_WRAP(Char, ReturnType, func, call, n, ...) \
+# define FMT_WRAP(Const, Char, ReturnType, func, call, n, ...) \
template <FMT_GEN(n, FMT_MAKE_TEMPLATE_ARG)> \
inline ReturnType func(FMT_FOR_EACH(FMT_ADD_ARG_NAME, __VA_ARGS__), \
- FMT_GEN(n, FMT_MAKE_ARG)) { \
+ FMT_GEN(n, FMT_MAKE_ARG)) Const { \
fmt::internal::ArgArray<n>::Type arr; \
FMT_GEN(n, FMT_ASSIGN_##Char); \
call(FMT_FOR_EACH(FMT_GET_ARG_NAME, __VA_ARGS__), fmt::ArgList( \
fmt::internal::make_type(FMT_GEN(n, FMT_MAKE_REF2)), arr)); \
}
-# define FMT_VARIADIC_(Char, ReturnType, func, call, ...) \
- inline ReturnType func(FMT_FOR_EACH(FMT_ADD_ARG_NAME, __VA_ARGS__)) { \
+# define FMT_VARIADIC_(Const, Char, ReturnType, func, call, ...) \
+ inline ReturnType func(FMT_FOR_EACH(FMT_ADD_ARG_NAME, __VA_ARGS__)) Const { \
call(FMT_FOR_EACH(FMT_GET_ARG_NAME, __VA_ARGS__), fmt::ArgList()); \
} \
- FMT_WRAP(Char, ReturnType, func, call, 1, __VA_ARGS__) \
- FMT_WRAP(Char, ReturnType, func, call, 2, __VA_ARGS__) \
- FMT_WRAP(Char, ReturnType, func, call, 3, __VA_ARGS__) \
- FMT_WRAP(Char, ReturnType, func, call, 4, __VA_ARGS__) \
- FMT_WRAP(Char, ReturnType, func, call, 5, __VA_ARGS__) \
- FMT_WRAP(Char, ReturnType, func, call, 6, __VA_ARGS__) \
- FMT_WRAP(Char, ReturnType, func, call, 7, __VA_ARGS__) \
- FMT_WRAP(Char, ReturnType, func, call, 8, __VA_ARGS__) \
- FMT_WRAP(Char, ReturnType, func, call, 9, __VA_ARGS__) \
- FMT_WRAP(Char, ReturnType, func, call, 10, __VA_ARGS__) \
- FMT_WRAP(Char, ReturnType, func, call, 11, __VA_ARGS__) \
- FMT_WRAP(Char, ReturnType, func, call, 12, __VA_ARGS__) \
- FMT_WRAP(Char, ReturnType, func, call, 13, __VA_ARGS__) \
- FMT_WRAP(Char, ReturnType, func, call, 14, __VA_ARGS__) \
- FMT_WRAP(Char, ReturnType, func, call, 15, __VA_ARGS__)
+ FMT_WRAP(Const, Char, ReturnType, func, call, 1, __VA_ARGS__) \
+ FMT_WRAP(Const, Char, ReturnType, func, call, 2, __VA_ARGS__) \
+ FMT_WRAP(Const, Char, ReturnType, func, call, 3, __VA_ARGS__) \
+ FMT_WRAP(Const, Char, ReturnType, func, call, 4, __VA_ARGS__) \
+ FMT_WRAP(Const, Char, ReturnType, func, call, 5, __VA_ARGS__) \
+ FMT_WRAP(Const, Char, ReturnType, func, call, 6, __VA_ARGS__) \
+ FMT_WRAP(Const, Char, ReturnType, func, call, 7, __VA_ARGS__) \
+ FMT_WRAP(Const, Char, ReturnType, func, call, 8, __VA_ARGS__) \
+ FMT_WRAP(Const, Char, ReturnType, func, call, 9, __VA_ARGS__) \
+ FMT_WRAP(Const, Char, ReturnType, func, call, 10, __VA_ARGS__) \
+ FMT_WRAP(Const, Char, ReturnType, func, call, 11, __VA_ARGS__) \
+ FMT_WRAP(Const, Char, ReturnType, func, call, 12, __VA_ARGS__) \
+ FMT_WRAP(Const, Char, ReturnType, func, call, 13, __VA_ARGS__) \
+ FMT_WRAP(Const, Char, ReturnType, func, call, 14, __VA_ARGS__) \
+ FMT_WRAP(Const, Char, ReturnType, func, call, 15, __VA_ARGS__)
#endif // FMT_USE_VARIADIC_TEMPLATES
/**
@@ -3695,10 +3706,16 @@ void arg(WStringRef, const internal::NamedArg<Char>&) FMT_DELETED_OR_UNDEFINED;
\endrst
*/
#define FMT_VARIADIC(ReturnType, func, ...) \
- FMT_VARIADIC_(char, ReturnType, func, return func, __VA_ARGS__)
+ FMT_VARIADIC_(, char, ReturnType, func, return func, __VA_ARGS__)
+
+#define FMT_VARIADIC_CONST(ReturnType, func, ...) \
+ FMT_VARIADIC_(const, char, ReturnType, func, return func, __VA_ARGS__)
#define FMT_VARIADIC_W(ReturnType, func, ...) \
- FMT_VARIADIC_(wchar_t, ReturnType, func, return func, __VA_ARGS__)
+ FMT_VARIADIC_(, wchar_t, ReturnType, func, return func, __VA_ARGS__)
+
+#define FMT_VARIADIC_CONST_W(ReturnType, func, ...) \
+ FMT_VARIADIC_(const, wchar_t, ReturnType, func, return func, __VA_ARGS__)
#define FMT_CAPTURE_ARG_(id, index) ::fmt::arg(#id, id)
@@ -3741,17 +3758,19 @@ template <typename Char>
unsigned parse_nonnegative_int(const Char *&s) {
assert('0' <= *s && *s <= '9');
unsigned value = 0;
+ // Convert to unsigned to prevent a warning.
+ unsigned max_int = (std::numeric_limits<int>::max)();
+ unsigned big = max_int / 10;
do {
- unsigned new_value = value * 10 + (*s++ - '0');
- // Check if value wrapped around.
- if (new_value < value) {
- value = (std::numeric_limits<unsigned>::max)();
+ // Check for overflow.
+ if (value > big) {
+ value = max_int + 1;
break;
}
- value = new_value;
+ value = value * 10 + (*s - '0');
+ ++s;
} while ('0' <= *s && *s <= '9');
// Convert to unsigned to prevent a warning.
- unsigned max_int = (std::numeric_limits<int>::max)();
if (value > max_int)
FMT_THROW(FormatError("number is too big"));
return value;
@@ -3923,7 +3942,8 @@ const Char *BasicFormatter<Char, ArgFormatter>::format(
default:
FMT_THROW(FormatError("width is not integer"));
}
- if (value > (std::numeric_limits<int>::max)())
+ unsigned max_int = (std::numeric_limits<int>::max)();
+ if (value > max_int)
FMT_THROW(FormatError("number is too big"));
spec.width_ = static_cast<int>(value);
}
@@ -3961,7 +3981,8 @@ const Char *BasicFormatter<Char, ArgFormatter>::format(
default:
FMT_THROW(FormatError("precision is not integer"));
}
- if (value > (std::numeric_limits<int>::max)())
+ unsigned max_int = (std::numeric_limits<int>::max)();
+ if (value > max_int)
FMT_THROW(FormatError("number is too big"));
spec.precision_ = static_cast<int>(value);
} else {
diff --git a/dep/fmt/fmt/printf.h b/dep/fmt/fmt/printf.h
index db91022c598..46205a78eee 100644
--- a/dep/fmt/fmt/printf.h
+++ b/dep/fmt/fmt/printf.h
@@ -125,7 +125,7 @@ class ArgConverter : public ArgVisitor<ArgConverter<T>, void> {
using internal::Arg;
typedef typename internal::Conditional<
is_same<T, void>::value, U, T>::type TargetType;
- if (sizeof(TargetType) <= sizeof(int)) {
+ if (const_check(sizeof(TargetType) <= sizeof(int))) {
// Extra casts are used to silence warnings.
if (is_signed) {
arg_.type = Arg::INT;